<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd">
<html>

<!--
	Copyright (c) 1999-2008 by Digital Mars
	All Rights Reserved
	Written by Walter Bright
	www.digitalmars.com
  -->

<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" >
<title>std.gc - D Programming Language - Digital Mars</title>
<link rel="stylesheet" type="text/css" href="./style.css">
<link rel="icon" type="image/gif" href="./holy.gif" />
</head>

<body>
<div id="heading">
	<a href="http://www.digitalmars.com/"><img src="./dmlogo.gif" width="270" height="53" border="0" alt="www.digitalmars.com" align="left"></a>
	<p align="right">D Programming Language 1.0</p>


	<div id="headingNav">
	<ul>
	<li><a href="http://www.prowiki.org/wiki4d/wiki.cgi?DocComments/Phobos/StdGc" title="Read/write comments and feedback">Comments</a></li>
	<li><a href="http://www.digitalmars.com/d/1.0/index.html" title="D Programming Language" class="dlink">D</a></li>
	<li><a href="http://www.digitalmars.com/advancedsearch.html" title="Search Digital Mars web site">Search</a></li>
	<li><a href="http://www.digitalmars.com/" title="www.digitalmars.com">Home</a></li>
	</ul>
	</div>

	<div id="lastupdate">Last update Wed Oct  1 23:47:52 2008</div>
</div>

<!-- -->

<div id="navigation">
    <div class="navblock">
<form method="get" action="http://www.google.com/search">
<div id="searchbox">
<input id="q" name="q" size="10" value="RTL Search" onFocus='if(this.value == "RTL Search"){this.value="";}'>
<input type="hidden" id="domains" name="domains" value="www.digitalmars.com">
<input type="hidden" id="sitesearch" name="sitesearch" value="www.digitalmars.com/d/1.0/phobos">
<input type="hidden" id="sourceid" name="sourceid" value="google-search">
<input type="submit" id="submit" name="submit" value="Go">
</div>
</form>
<div id="toctop">
    <ul>
	<li><a href="http://www.digitalmars.com/d/1.0/index.html" title="D Programming Language">D ...</a></li>
	<li><a href="http://www.digitalmars.com/d/1.0/lex.html" title="D Language Specification">Language ...</a></li>
	<li><a href="phobos.html" title="D Runtime Library">Phobos ...</a></li>
	<li><a href="http://www.digitalmars.com/d/1.0/comparison.html" title="Language Comparisons">Comparisons ...</a></li>
    </ul>
</div>
</div>
    <div class="navblock">
<ul>
<li><a href="index.html" title="Index of all HTML files">Index</a></li>
</ul>
    <ul>
	<li><a href="object.html" title="root of object hierarchy">object</a></li>
    </ul>
    <h2><a href="phobos.html#std" title="D standard modules">std</a></h2>
    <ul>
	<li><a href="std.base64.html" title="Encode/decode base64 format">std.base64</a></li>
	<li><a href="std.bind.html" title="Function argument binding">std.bind</a></li>
	<li><a href="std.bitarray.html" title="Arrays of bits">std.bitarray</a></li>
	<li><a href="std.boxer.html" title="Box/unbox types">std.boxer</a></li>
	<li><a href="std.compiler.html" title="Information about the D compiler implementation">std.compiler</a></li>
	<li><a href="std.conv.html" title="Conversion of strings to integers">std.conv</a></li>
	<li><a href="std.cover.html" title="D coverage analyzer">std.cover</a></li>
	<li><a href="std.cpuid.html" title="CPU identification">std.cpuid</a></li>
	<li><a href="std.ctype.html" title="Simple character classification">std.ctype</a></li>
	<li><a href="std.date.html" title="Date and time functions">std.date</a></li>
	<li><a href="std.demangle.html" title="Demangle D names">std.demangle</a></li>
	<li><a href="std.file.html" title="Basic file operations">std.file</a></li>
	<li><a href="std.format.html" title="Formatted conversions of values to strings">std.format</a></li>
	<li><a href="std.gc.html" title="Control the garbage collector">std.gc</a></li>
	<li><a href="std.intrinsic.html" title="Compiler built in intrinsic functions">std.intrinsic</a></li>
	<li><a href="std.math.html" title="the usual math functions">std.math</a></li>
	<li><a href="std.md5.html" title="Compute MD5 digests">std.md5</a></li>
	<li><a href="std.metastrings.html" title="Metaprogramming with strings">std.metastrings</a></li>
	<li><a href="std.mmfile.html" title="Memory mapped files">std.mmfile</a></li>
	<li><a href="std.openrj.html" title="Basic database">std.openrj</a></li>
	<li><a href="std.outbuffer.html" title="Assemble data into an array of bytes">std.outbuffer</a></li>
	<li><a href="std.outofmemory.html" title="Out of memory exception">std.outofmemory</a></li>
	<li><a href="std.path.html" title="Manipulate file names, path names, etc.">std.path</a></li>
	<li><a href="std.process.html" title="Create/destroy threads">std.process</a></li>
	<li><a href="std.random.html" title="Random number generation">std.random</a></li>
	<li><a href="std.regexp.html" title="regular expressions">std.regexp</a></li>
	<li><a href="std.signals.html" title="Signals">std.signals</a></li>
	<li><a href="std.socket.html" title="Sockets">std.socket</a></li>
	<li><a href="std.socketstream.html" title="Stream for a blocking, connected Socket">std.socketstream</a></li>
	<li><a href="std.stdint.html" title="Integral types for various purposes">std.stdint</a></li>
	<li><a href="std.stdio.html" title="Standard I/O">std.stdio</a></li>
	<li><a href="std.cstream.html" title="Stream I/O">std.cstream</a></li>
	<li><a href="std.stream.html" title="Stream I/O">std.stream</a></li>
	<li><a href="std.string.html" title="Basic string operations">std.string</a></li>
	<li><a href="std.system.html" title="Inquire about the CPU, operating system">std.system</a></li>
	<li><a href="std.thread.html" title="Thread operations">std.thread</a></li>
	<li><a href="std.traits.html" title="Type traits">std.traits</a></li>
	<li><a href="std.typetuple.html" title="Type tuples">std.typetuple</a></li>
	<li><a href="std.uni.html" title="Unicode classification">std.uni</a></li>
	<li><a href="std.uri.html" title="Encode and decode Uniform Resource Identifiers (URIs)">std.uri</a></li>
	<li><a href="std.utf.html" title="Encode and decode utf character encodings">std.utf</a></li>
	<li><a href="std.zip.html" title="Read/write zip archives">std.zip</a></li>
	<li><a href="std.zlib.html" title="Compression / Decompression of data">std.zlib</a></li>
	<li><a href="std.c.fenv.html" title="Floating point environment">std.c.fenv</a></li>
	<li><a href="std.c.locale.html" title="Locale">std.c.locale</a></li>
	<li><a href="std.c.math.html" title="Math">std.c.math</a></li>
	<li><a href="std.c.process.html" title="Process">std.c.process</a></li>
	<li><a href="std.c.stdarg.html" title="Variadic arguments">std.c.stdarg</a></li>
	<li><a href="std.c.stddef.html" title="Standard definitions">std.c.stddef</a></li>
	<li><a href="std.c.stdio.html" title="Standard I/O">std.c.stdio</a></li>
	<li><a href="std.c.stdlib.html" title="Standard library">std.c.stdlib</a></li>
	<li><a href="std.c.string.html" title="Strings">std.c.string</a></li>
	<li><a href="std.c.time.html" title="Time">std.c.time</a></li>
	<li><a href="std.c.wcharh.html" title="Wide characters">std.c.wcharh</a></li>
	<li><a href="std.windows.charset.html" title="Conversion to/from Windows character sets">std.windows.charset</a></li>
	<li><a href="phobos.html#std_windows" title="Modules specific to Windows">std.windows</a></li>
	<li><a href="phobos.html#std_linux" title="Modules specific to Windows">std.linux</a></li>
	<li><a href="phobos.html#std_c_windows" title="C Windows API">std.c.windows</a></li>
	<li><a href="phobos.html#std_c_linux" title="C Linux API">std.c.linux</a></li>
    </ul>
</div>
</div>
<div id="content">
    <h1><a href="./htmlsrc/std.gc.html">std.gc</a></h1>
    
The garbage collector normally works behind the scenes without needing any
 specific interaction. These functions are for advanced applications that
 benefit from tuning the operation of the collector.
 <br><br>
<dl>
<dt><big>void <a href="./htmlsrc/std.gc.html#L45" title="At line 45.">addRoot</a>(void * <i>p</i>);</big></dt>
<dd>
Add p to list of roots. Roots are references to memory allocated by the
 collector that are maintained in memory outside the collector pool. The garbage
 collector will by default look for roots in the stacks of each thread, the
 registers, and the default static data segment. If roots are held elsewhere,
 use addRoot&#40;&#41; or addRange&#40;&#41; to tell the collector not to free the memory it
 points to.
 <br><br></dd>
<dt><big>void <a href="./htmlsrc/std.gc.html#L50" title="At line 50.">removeRoot</a>(void * <i>p</i>);</big></dt>
<dd>
Remove p from list of roots.
 <br><br></dd>
<dt><big>void <a href="./htmlsrc/std.gc.html#L55" title="At line 55.">addRange</a>(void * <i>pbot</i>, void * <i>ptop</i>);</big></dt>
<dd>
Add range to scan for roots.
 <br><br></dd>
<dt><big>void <a href="./htmlsrc/std.gc.html#L60" title="At line 60.">removeRange</a>(void * <i>pbot</i>);</big></dt>
<dd>
Remove range.
 <br><br></dd>
<dt><big>void <a href="./htmlsrc/std.gc.html#L65" title="At line 65.">hasPointers</a>(void* <i>p</i>);</big></dt>
<dd>
Mark a gc allocated block of memory as possibly containing pointers.
 <br><br></dd>
<dt><big>void <a href="./htmlsrc/std.gc.html#L70" title="At line 70.">hasNoPointers</a>(void* <i>p</i>);</big></dt>
<dd>
Mark a gc allocated block of memory as definitely NOT containing pointers.
 <br><br></dd>
<dt><big>void <a href="./htmlsrc/std.gc.html#L76" title="At line 76.">setTypeInfo</a>(TypeInfo <i>ti</i>, void* <i>p</i>);</big></dt>
<dd>
Mark a gc allocated block of memory pointed to by p as being populated with
 an array of TypeInfo ti &#40;as many as will fit&#41;.
 <br><br></dd>
<dt><big>void[] <a href="./htmlsrc/std.gc.html#L84" title="At line 84.">malloc</a>(size_t <i>nbytes</i>);</big></dt>
<dd>
Allocate nbytes of uninitialized data.
 The allocated memory will be scanned for pointers during
 a gc collection cycle, unless
 it is followed by a call to hasNoPointers&#40;&#41;.
 <br><br></dd>
<dt><big>void[] <a href="./htmlsrc/std.gc.html#L97" title="At line 97.">realloc</a>(void* <i>p</i>, size_t <i>nbytes</i>);</big></dt>
<dd>
Resize allocated memory block pointed to by p to be at least nbytes long.
 It will try to resize the memory block in place.
 If nbytes is 0, the memory block is free'd.
 If p is null, the memory block is allocated using malloc.
 The returned array may not be at the same location as the original
 memory block.
 The allocated memory will be scanned for pointers during
 a gc collection cycle, unless
 it is followed by a call to hasNoPointers&#40;&#41;.
 <br><br></dd>
<dt><big>size_t <a href="./htmlsrc/std.gc.html#L107" title="At line 107.">extend</a>(void* <i>p</i>, size_t <i>minbytes</i>, size_t <i>maxbytes</i>);</big></dt>
<dd>
Attempt to enlarge the memory block pointed to by p
 by at least minbytes beyond its current capacity,
 up to a maximum of maxbytes.
 <br><br>
<b>Returns:</b><br>
0 if could not extend p,
	total size of entire memory block if successful.<br><br></dd>
<dt><big>size_t <a href="./htmlsrc/std.gc.html#L116" title="At line 116.">capacity</a>(void* <i>p</i>);</big></dt>
<dd>
Returns capacity &#40;size of the memory block&#41; that p
 points to the beginning of.
 If p does not point into the gc memory pool, or does
 not point to the beginning of an allocated memory block,
 0 is returned.
 <br><br></dd>
<dt><big>void <a href="./htmlsrc/std.gc.html#L121" title="At line 121.">setV1_0</a>();</big></dt>
<dd>
Set gc behavior to match that of 1.0.
 <br><br></dd>
<dt><big>void <a href="./htmlsrc/std.gc.html#L136" title="At line 136.">fullCollect</a>();</big></dt>
<dd>
Run a full garbage collection cycle.<br><br>
The collector normally runs synchronously with a storage allocation request
 &#40;i.e. it never happens when in code that does not allocate memory&#41;. In some
 circumstances, for example when a particular task is finished, it is convenient
 to explicitly run the collector and free up all memory used by that task. It
 can also be helpful to run a collection before starting a new task that would
 be annoying if it ran a collection in the middle of that task. Explicitly
 running a collection can also be done in a separate very low priority thread,
 so that if the program is idly waiting for input, memory can be cleaned up.
 <br><br></dd>
<dt><big>void <a href="./htmlsrc/std.gc.html#L144" title="At line 144.">genCollect</a>();</big></dt>
<dd>
Run a generational garbage collection cycle.
 Takes less time than a fullcollect&#40;&#41;, but isn't
 as effective.
 <br><br></dd>
<dt><big>void <a href="./htmlsrc/std.gc.html#L146" title="At line 146.">genCollectNoStack</a>();</big></dt>
<dd></dd>
<dt><big>void <a href="./htmlsrc/std.gc.html#L151" title="At line 151.">minimize</a>();</big></dt>
<dd>
Minimizes physical memory usage
 <br><br></dd>
<dt><big>void <a href="./htmlsrc/std.gc.html#L166" title="At line 166.">disable</a>();</big></dt>
<dt><big>void <a href="./htmlsrc/std.gc.html#L171" title="At line 171.">enable</a>();</big></dt>
<dd>
disable&#40;&#41; temporarily disables garbage collection cycle, enable&#40;&#41;
 then reenables them.<br><br>
This is used for brief time critical sections of code, so the amount of time
 it will take is predictable.
 If the collector runs out of memory while it is disabled, it will throw an
 std.outofmemory.OutOfMemoryException.
 The disable&#40;&#41; function calls can be nested, but must be
 matched with corresponding enable&#40;&#41; calls.
 By default collections are enabled.
 <br><br></dd>
<dt><big>void <a href="./htmlsrc/std.gc.html#L173" title="At line 173.">getStats</a>(out GCStats <i>stats</i>);</big></dt>
<dd></dd>
<dt><big>void* <a href="./htmlsrc/std.gc.html#L179" title="At line 179.">getGCHandle</a>();</big></dt>
<dd>
Get handle to the collector.
 <br><br></dd>
<dt><big>void <a href="./htmlsrc/std.gc.html#L185" title="At line 185.">setGCHandle</a>(void* <i>p</i>);</big></dt>
<dd>
Set handle to the collector.
 <br><br></dd>
<dt><big>void <a href="./htmlsrc/std.gc.html#L187" title="At line 187.">endGCHandle</a>();</big></dt>
<dd></dd>
<dt><big>void <a href="./htmlsrc/std.gc.html#L191" title="At line 191.">gc_init</a>(); [extern(C)]</big></dt>
<dd></dd>
<dt><big>void <a href="./htmlsrc/std.gc.html#L192" title="At line 192.">gc_term</a>(); [extern(C)]</big></dt>
<dd></dd></dl>
    <br><br>
<br><br>
<!-- Google ad -->
<script type="text/javascript"><!--
/**/google_ad_client = "pub-5628673096434613";
/**/google_ad_width = 728;
/**/google_ad_height = 90;
/**/google_ad_format = "728x90_as";
/**/google_ad_channel ="6203743411";
/**/google_page_url = document.location;
//--></script>
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
</div>


<div id="copyright">
Copyright &copy; 1999-2008 by Digital Mars, All Rights Reserved |
Page generated by <a href="http://code.google.com/p/dil">dil</a> on Wed Oct  1 23:47:52 2008
</div>

</body>
</html>